﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Web;
using BLL;
using VOL;

namespace Web.Class
{
    public class GioHangClass
    {
        DMHangBL _DMHangBL = new DMHangBL();
        DataTable _dtGioHang = new DataTable();
        public GioHangClass()
        {
 
        }

        /// <summary>
        /// tạo ra bảng với các cột chứa thông tin mặt hàng đã mua
        /// và lưu vào session
        /// </summary>
        public void CreateGioHang()
        {
            _dtGioHang = new DataTable();
            _dtGioHang.Columns.Add("MaHang");
            _dtGioHang.Columns.Add("TenHang");
            _dtGioHang.Columns.Add("DonGia");
            _dtGioHang.Columns.Add("SoLuong");
            _dtGioHang.Columns.Add("ThanhTien");
            _dtGioHang.Columns.Add("HinhAnh");
            _dtGioHang.Columns.Add("DVT");

            HttpContext.Current.Session["cart"] = _dtGioHang;
        }

        /// <summary>
        /// thực hiện xử lý thao tác click vào mua hàng
        /// </summary>
        /// <param name="MaHang">Mã hàng cần mua</param>
        /// <param name="SoLuong">Số Lượng cần mua</param>
        public void MuaHang(int MaHang, int SoLuong = 1)
        {
            // chưa tồn tạo giỏ hàng
            if (HttpContext.Current.Session["cart"] == null)
            {
                // tạo giỏ hàng
                CreateGioHang();
                ThemHang(MaHang);
            }
            else
            {
                // cập nhật lại giỏ hàng
                // có sản phẩm tồn tại

                // kiêm tra xem mã hàng có tồn tại hay chưa?
                bool ExistFlg = false;
                _dtGioHang = (DataTable)HttpContext.Current.Session["cart"];

                foreach (DataRow row in _dtGioHang.Rows)
                {
                    // kiểm tra mã hàng trong giỏ và mã hàng truyền vào
                    // bằng nhau là đã tồn tại
                    if (row["MaHang"].ToString().Equals(MaHang.ToString()))
                    {
                        // update lại thông tin số lượng và thành tiền
                        row["SoLuong"] = int.Parse(row["SoLuong"].ToString()) + SoLuong;
                        row["ThanhTien"] = int.Parse(row["SoLuong"].ToString()) * float.Parse(row["DonGia"].ToString());
                        ExistFlg = true;
                    }
                }

                if (ExistFlg == false)
                {
                    ThemHang(MaHang);
                }
            }
            HttpContext.Current.Session["cart"] = _dtGioHang;
        }

        /// <summary>
        /// lấy thông tin và add vào giỏ hàng
        /// </summary>
        /// <param name="MaHang"></param>
        private void ThemHang(int MaHang)
        {
            // lấy thông tin hàng hóa
            DMHang obj = new DMHang();
            obj.MaHang = MaHang;
            DataTable dt = _DMHangBL.searchIDDMHang(obj);
            DataRow row = _dtGioHang.NewRow();
            row["MaHang"] = dt.Rows[0]["MaHang"];
            row["TenHang"] = dt.Rows[0]["TenHang"];
            row["DonGia"] = dt.Rows[0]["DonGia"];
            row["SoLuong"] = 1;
            row["ThanhTien"] = dt.Rows[0]["DonGia"];
            row["HinhAnh"] = dt.Rows[0]["HinhAnh"];
            row["DVT"] = dt.Rows[0]["DVT"];
            _dtGioHang.Rows.Add(row);
        }

        /// <summary>
        /// get tổng tiền
        /// </summary>
        /// <returns></returns>
        public float TongTien()
        {
            if (HttpContext.Current.Session["cart"] == null)
            {
                return 0;
            }
            else
            {
                _dtGioHang = (DataTable)HttpContext.Current.Session["cart"];
                float TongTien = 0;
                foreach (DataRow row in _dtGioHang.Rows)
                {
                    TongTien = TongTien + float.Parse(row["ThanhTien"].ToString());
                }

                return TongTien;
            }
        }

        /// <summary>
        /// xử lý cập nhật lại giỏ hàng
        /// nếu số lưỡng < 1 thì xóa mã hàng đó đi
        /// </summary>
        /// <param name="MaHang"></param>
        /// <param name="SoLuong"></param>
        public void CapNhatGioHang(int MaHang, int SoLuong)
        {
            if (HttpContext.Current.Session["cart"] != null)
            {
                _dtGioHang = (DataTable)HttpContext.Current.Session["cart"];
                foreach (DataRow row in _dtGioHang.Rows)
                {
                    // kiểm tra mã hàng trong giỏ và mã hàng truyền vào
                    // bằng nhau là đã tồn tại
                    if (row["MaHang"].ToString().Equals(MaHang.ToString()))
                    {
                        if (SoLuong > 0)
                        {
                            // update lại thông tin số lượng và thành tiền
                            row["SoLuong"] =  SoLuong;
                            row["ThanhTien"] = int.Parse(row["SoLuong"].ToString()) * float.Parse(row["DonGia"].ToString());
                        }
                        else
                        {
                            // xóa mặt hàng
                            _dtGioHang.Rows.Remove(row);
                        }
                    }
                }
                HttpContext.Current.Session["cart"] = _dtGioHang;
            }
        }

        /// <summary>
        /// get tổng số sản phẩm
        /// </summary>
        /// <returns></returns>
        public static int TongSoSanPham()
        {
            if (HttpContext.Current.Session["cart"] == null)
            {
                return 0;
            }
            else
            {
                return ((DataTable)HttpContext.Current.Session["cart"]).Rows.Count;
            }
        }

        public static void DeleteGioHang()
        {
            HttpContext.Current.Session["cart"] = null;
        }

        public static bool CheckTonTai()
        {
            if (HttpContext.Current.Session["cart"] != null)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static DataTable GetGioHang()
        {
            if (HttpContext.Current.Session["cart"] != null)
            {
                return (DataTable)HttpContext.Current.Session["cart"];
            }
            else
            {
                return null;
            }
        }
    }
}